In a computing device, a processor may offload a data transfer to a direct memory access (DMA) engine or controller. In response to a data transfer request, the processor may execute a device driver. The device driver may cause the processor to generate one or more DMA descriptors defining the data transfer. The DMA controller may then process the DMA descriptors and transfer data per the DMA descriptors.